home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 6
/
FM Towns Free Software Collection 6.iso
/
t_os
/
et
/
src
/
et.h
< prev
next >
Wrap
Text File
|
1993-07-08
|
16KB
|
471 lines
#ifndef ET_H
#define _AS
/*
#undef _AS
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>
#include <setjmp.h>
typedef unsigned VRAM; /* VRAM アクセス単位 */
#define N_LAST_DOT 72 /* 残量表示ドット数 */
#define N_FONT_LEN 13216 /* 全メニュ文字列フォント長 */
#define N_MENU_NAME 765 /* 全使用可能キー数 */
#define MAX_MOUSE 15 /* マウス移動速度(16以上×)*/
#define GETA_ET 65536 /* 32ビット固定実数小数点位置 */
#define Y_INC 80 /* 横表示文字数 */
#define VRAM_SIZE 0x20000 /* VRAM 1ページ幅 */
#define VIEW_SIZE 0x12000 /* 図形表示範囲 */
#define MAX_ICN 64 /* 最大ファイルアイコン数 */
#define pm_HOKAN 20 /* 未使用 */
#define pm_PERS 500 /* 遠近の標準値 */
#define pm_DIST 500 /* 距離 */
#define pm_X_STEP 20 /* 横幅 */
#define pm_Y_STEP 20 /* 縦幅 */
#define pm_Z_STEP 20 /* 奥幅 */
#define pm_ANGLE 15 /* 角度 */
#define pm_STEREO 40 /* 視差 */
#define nb_EDGE 4 /* 初期カーソル辺の数 */
#define BUF_SIZE 2000 /* マウスカーソル表示バッファ */
#define MAX_KEY 20000 /* 最大移動キー数 */
#define CSR_SIZE 1000 /* 最大変更カーソル数 */
#define BAR_SIZE 12*20 /* スペースバー表示サイズ */
#define EOK 255 /* END OF 移動キー */
#define EOC 127 /* END OF カーソル */
#define f_SS 0x1 /* <保存> */
#define f_LL 0x2 /* <読込> */
#define f_CC 0x4 /* <カーソル> */
#define f_EE 0x8 /* <登録> */
#define f_FF 0x10 /* <F> */
#define f_AA 0x20 /* <動画> */
#define f_NN 0x40 /* <反転> */
#define f_IO 0x80 /* アイコン選択 */
#define f_PPGG 0x100 /* <遠近~角度> */
#define f_WW 0x200 /* <視差> */
#define f_TT 0x400 /* <TRIPHONY> */
#define f_SPLINE 0x800 /* 未使用 */
#define f_RR 0x1000 /* 視差の補正 */
#define f_CHK 0x2000 /* データの要/不要チェック */
#define f_AT 0x4000 /* 補間間隔設定(未使用) */
#define f_EXG 0x8000 /* 平行法 */
#define f_SV 0x10000 /* 裸眼立体視モード */
#define f_TROFF 0x20000 /* 軌跡なし */
#define f_TRON 0x40000 /* 軌跡あり(<F> で使用) */
#define f_PUSH 0x80000 /* 表示キーを左クリックで ON */
#define f_VIEW 0x100000 /* カーソル現在位置表示 */
#define f_DEMO 0x200000 /* <デモ再現> */
#define f_MAKE 0x400000 /* <デモ作成> */
#define f_REPLAY 0x800000 /* <入力再現> */
#define f_REV 0x1000000 /* 自転でない回転 */
#define f_GPH 0x2000000 /* 赤青立体視 */
#define f_RND 0x4000000 /* ランダムに残量表示 */
#define f_BAR 0x8000000 /* 図形描画中 */
#define f_BLIND 0x10000000/* 描画過程を表示しない */
#define f_ABORT 0x20000000/* 再現を中断 */
#define f_AREA 0x40000000/* 移動キーフリーエリアが満杯 */
#define f_ERR 0x80000000/* エラー発生 */
#define f2_PNA 0x1 /* copy_pna() 初期化 */
#define f2_FONT 0x2 /* font() 初期化 */
#define f2_MOUSE 0x4 /* マウスを任意の位置へ移動 */
#define f2_MAIN 0x8 /* 起動メニュ位置からマウス表示 */
#define f2_RET 0x10 /* RET キー位置からマウス表示 */
#define f2_ERR_1 0x80000000/* <ディスクがいっぱいです> */
#define f2_ERR_2 0x40000000/* <ファイルが作れません> */
#define f2_ERR_3 0x20000000/* <メモリが足りません> */
#define f2_ERR_4 0x10000000/* <ファイルがありません> */
enum {
P_SET, /* ← opt.c で使用 */
P_RES, /* ← opt.c で使用 */
P_NEG, /* ← opt.c で使用 */
POKE, /* VRAM へ書き込み */
PEEK, /* VRAM から読み出し */
STORE, /* 退避 */
RESTORE, /* 復帰 */
EXCHANGE, /* 交換 */
BEF, /* カーソル表示前の処理 */
AFT, /* 表示後の処理 */
ENT, /* <登録> での処理 */
SCAN, /* バッファからキーコード読み出し */
GETCH, /* キーボードから読み出し */
WINK, /* カーソル点滅 */
ICN, /* 再現データから削除 */
BREAK /* ループ中断 */
} N_mode;
enum { /* 使用可能キーリストの先頭メニュNo. */
mn_LOGO,
mn_BS,
mn_SS, mn_LL, mn_CC, mn_EE, mn_HH, mn_AA, mn_NN, mn_OO, mn_RR,
mn_UP, mn_LT, mn_FR, mn_S_UP, mn_S_LT, mn_S_FR,
mn_DN, mn_RT, mn_BK, mn_S_DN, mn_S_RT, mn_S_BK,
mn_BAR, mn_JJ,
mn_ESC,
mn_AT, mn_PP, mn_DD, mn_XX, mn_YY, mn_ZZ, mn_GG, mn_WW,
mn_TAB, mn_INS,
mn_TT,
mn_C_UP, mn_C_LT, mn_C_FR,
mn_RET,
mn_C_DN, mn_C_RT, mn_C_BK,
mn_FF,
mn_POS, mn_RND,
mn_S_EE, mn_S_RR, mn_S_RET, mn_S_BS, mn_S_ESC,
mn_C_EE, mn_C_SS, mn_C_XX, mn_C_DD, mn_C_MM,
mn_END_RET, mn_END_ESC,
mn_FREE_AREA, mn_FREE_SAVE, mn_FREE_WORK,
mn_MN_AA, mn_MN_NN, mn_MN_OO,
mn_MN_DEL_AA, mn_MN_DEL_NN, mn_MN_DEL_OO,
mn_MN_AREA_AA, mn_MN_AREA_NN, mn_MN_AREA_OO,
mn_MN_CC,
mn_00, mn_11, mn_22, mn_33, mn_44, mn_55, mn_66, mn_77, mn_88, mn_99,
mn_LT_CC, mn_RT_CC, mn_UP_CC, mn_DN_CC,
mn_MN_FF,
mn_0, mn_1, mn_2, mn_3, mn_4, mn_5, mn_6, mn_7, mn_8, mn_9,
mn_A, mn_B, mn_C, mn_D, mn_E, mn_F,
mn_MN_TT,
mn_DISK,
mn_LT_TT, mn_RT_TT, mn_UP_TT, mn_DN_TT,
mn_TITLE,
mn_ERR_1, mn_ERR_2, mn_ERR_3, mn_ERR_4,
mn_DEMO, mn_MAKE, mn_REPLAY, mn_START,
mn_END,
mn_MESS_1,
mn_ICN,
mn_ERR
} N_mn;
enum {
c_FILE_KEY,
c_FILE_CSR,
c_FILE_REPLAY,
c_FILE_MESSAGE,
c_FILE_ICN_KEY,
c_FILE_ICN_CSR,
c_FILE_BAK,
c_FILE_ET_TEMP,
c_FILE_SPLINE,
c_PNA_NAME,
c_DIR_NAME,
c_COL_A,
c_COL_G,
c_COL_N,
c_COL_DMY,
c_KEY_0,
c_ADD_KEY,
c_CSR,
c_DTA_TAB,
c_PATT_FONT,
c_GAIJI_FONT,
c_DIR,
c_PNA_OLD,
c_PNA_NEW,
c_PNA_BAR
} N_c;
enum {
i_KEY_DEMO,
i_BLUE_KEY,
i_KEY_MOVE,
i_NOT_UP_TAB,
i_WIN_VRAM,
i_WIN_VIEW,
i_WIN_VIEW_LT,
i_WIN_VIEW_RT,
i_WIN_FRAME,
i_WIN_MENU,
i_WIN_VIEW_FRAME,
i_WIN_CHECK_FRAME,
i_WIN_CHECK_LT_FRAME,
i_WIN_CHECK_RT_FRAME,
i_WIN_BAR,
i_WIN_FREE_AREA,
i_WIN_FREE_SAVE,
i_WIN_FREE_WORK,
i_WIN_FREE_DISK,
i_WIN_PARA,
i_WIN_RET,
i_WIN_PNA,
i_WIN_FONT,
i_WIN_RANGE,
i_WIN_RANGE_LT,
i_WIN_RANGE_RT,
i_WIN_RANGE_B,
i_WIN_RANGE_LT_B,
i_WIN_RANGE_RT_B,
i_SIZE_VIEW,
i_SIZE_CHECK_VIEW,
i_SIZE_ICN,
i_FNT_CODE,
i_CSR_000_ET,
i_ANGLE,
i_PNA_N,
i_PNA_I,
i_JMP_BUF
} N_i;
enum {
v_VIEW_0,
v_VIEW_1,
v_VIEW_2,
v_VIEW_3,
v_MOUSE_BUF,
v_MOUSE_BUF_2,
v_KEY_BUF,
v_KEY_BUF_2,
v_MOUSE_TMP,
v_MOUSE_TMP_2,
v_KEY_TMP ,
v_KEY_TMP_2 ,
v_VRAM,
v_BAR,
v_ICN
} N_v;
enum {
dot_BAR,
dot_FREE_AREA,
dot_FREE_SAVE,
dot_FREE_WORK
} N_dot;
enum {/* 色コード(16色モード) */
L_BLK, L_BLU, L_RED, L_MZN, L_GRN, L_SYN, L_YEL, L_WHT,
H_BLK, H_BLU, H_RED, H_MZN, H_GRN, H_SYN, H_YEL, H_WHT
} N_low_high_color;
enum {/* キーNo. */
_KEY='0'-1,
_00, _11, _22, _33, _44, _55, _66, _77, _88, _99,
_RT, _LT, _DN, _UP, _FR, _BK, _AT,
_AA, _BB, _CC, _DD, _EE, _FF, _GG, _HH, _II, _JJ,
_KK, _LL, _MM, _NN, _OO, _PP, _QQ, _RR, _SS, _TT,
_UU, _VV, _WW, _XX, _YY, _ZZ, _BAR, _BS, _INS,
_HOME, _RET, _TAB, _ESC, _KO, _COLN,
_SHIFT, /* SHIFT+ */
S_00,S_11,S_22,S_33,S_44,S_55,S_66,S_77,S_88,S_99,
S_RT,S_LT,S_DN,S_UP,S_FR,S_BK,S_AT,
S_AA,S_BB,S_CC,S_DD,S_EE,S_FF,S_GG,S_HH,S_II,S_JJ,
S_KK,S_LL,S_MM,S_NN,S_OO,S_PP,S_QQ,S_RR,S_SS,S_TT,
S_UU,S_VV,S_WW,S_XX,S_YY,S_ZZ,S_BAR,S_BS,S_INS,
S_HOME,S_RET,S_TAB,S_ESC,S_KO,S_COLN,
_CTRL, /* CTRL+ */
C_00,C_11,C_22,C_33,C_44,C_55,C_66,C_77,C_88,C_99,
C_RT,C_LT,C_DN,C_UP,C_FR,C_BK,C_AT,
C_AA,C_BB,C_CC,C_DD,C_EE,C_FF,C_GG,C_HH,C_II,C_JJ,
C_KK,C_LL,C_MM,C_NN,C_OO,C_PP,C_QQ,C_RR,C_SS,C_TT,
C_UU,C_VV,C_WW,C_XX,C_YY,C_ZZ,C_BAR,C_BS,C_INS,
C_HOME,C_RET,C_TAB,C_ESC,C_KO,C_COLN,
_SHIFT_CTRL, /* SHIFT+CTRL+ */
S_C_00,S_C_11,S_C_22,S_C_33,S_C_44,S_C_55,S_C_66,S_C_77,S_C_88,S_C_99,
S_C_RT,S_C_LT,S_C_DN,S_C_UP,S_C_FR,S_C_BK,S_C_AT,
S_C_AA,S_C_BB,S_C_CC,S_C_DD,S_C_EE,S_C_FF,S_C_GG,S_C_HH,S_C_II,S_C_JJ,
S_C_KK,S_C_LL,S_C_MM,S_C_NN,S_C_OO,S_C_PP,S_C_QQ,S_C_RR,S_C_SS,S_C_TT,
S_C_UU,S_C_VV,S_C_WW,S_C_XX,S_C_YY,S_C_ZZ,S_C_BAR,S_C_BS,S_C_INS,
S_C_HOME,S_C_RET,S_C_TAB,S_C_ESC,S_C_KO,S_C_COLN
} N_key;
#define ICN_I (C_COLN+1)/* == (ファイルアイコンNo.0)->key */
typedef struct {/* 空間上のカーソル */
int xyz[6]; /* 座標値 */
} ET;
typedef struct {/* 表示上のカーソル */
int pq[4]; /* 座標値 */
int f; /* 表示/非表示を指定 */
} EDGE;
typedef struct {/* 移動データ */
int x, y, z; /* 未使用 */
short key, r; /* 移動/回転キー, 視差 */
} MOVE;
typedef struct {/* 諸変数 */
int hokan; /* 未使用 */
int pers; /* 遠近 */
int dist; /* 距離 */
int x_step; /* 横幅 */
int y_step; /* 縦幅 */
int z_step; /* 奥幅 */
int angle; /* 角度 */
int r; /* 視差 */
} PM;
typedef union {
PM i; /* 演算時 */
int a[8]; /* 設定時 */
} PARAMETER;
typedef struct {/* pna.c でのみ使用 */
int col; /* PNA ファイル名表示色 */
int p, q; /* 表示位置 */
char s[100]; /* ファイル名 */
} TT;
struct _NAME {/* 使用可能キーリスト */
int key, n; /* 使用可能キー, メニュNo. */
int pq[4]; /* 表示キーの画面上の大きさ */
struct _NAME *next; /* mn_SS, mn_LL, mn_EE, mn_CC で mn_ICN へ接続 */
};
typedef struct _NAME NAME;
typedef struct {/* モードメニュ */
char *s, *font; /* メニュ文字列, 同フォント */
int key, len, p, q; /* メニュ選択キー, 文字列長さ, 表示位置 */
NAME *name; /* 使用可能キーリストへのポインタ */
} MENU;
struct _DIR {/* PNA ファイル名リスト(未使用VRAM上に作成)*/
struct _DIR *pre; /* 前 */
struct _DIR *dir; /* 自分 */
struct _DIR *next; /* 次 */
int len; /* ファイル名長さ */
char *s; /* ファイル名文字列 */
};
typedef struct _DIR DIR;
typedef struct {/* 大域諸変数 */
int edge, cut, page;/* カーソルの辺の数, クリックNo., 表示ページNo. */
int et; /* カーソルNo. */
int edge_b; /* カーソル辺数バックアップ(entry.c) */
int key, csr; /* 移動, カーソルのデータファイル数 */
int icn; /* アイコンNo. */
int ps_r; /* 裸眼立体視での図形間隔 */
int replay; /* 入力キー(再現データ)へのポインタ */
int drive; /* 容量チェック対象ドライブNo. */
int mn; /* 現在のメニュNo. */
int col; /* カーソル位置マーカ表示色 */
int mouse; /* マウスカーソル移動速度カウンタ */
int current; /* 起動時カレントドライブNo. */
int pna_drive; /* PNA ファイルドライブNo. */
int max_edge; /* 最大カーソル辺数 */
int dev, mod, dev_i, mod_i, dot_i;/* 残量表示関係 */
int key_i; /* 移動キーNo.(視差の補正で使用)*/
} NUMBER;
typedef struct {/* カーソル現在位置 */
int x, y, z; /* 空間座標値 */
int x_g, y_g, z_g; /* 未サポート */
} POSITION;
typedef struct {
char *csr; /* 使用カーソルリスト */
char *dir; /* ディレクトリ名リスト(ドライブ変更毎に更新)*/
char *pna; /* ドライブ名¥ディレクトリ名¥PNA ファイル名リスト */
char *fp; /* 未使用 VRAM 上の現在位置(<デモ再現>) */
char *key_fp; /* 同じく移動データ位置 */
char *csr_fp; /* 同じくカーソルデータ位置 */
int *demo; /* デモデータ(etd.h)位置 */
int *wink; /* 表示内容パッチのウインド位置 */
void (*range)(); /* カーソル位置表示関数の別 */
void (*range_b)(); /* 消去用 */
void (*range_lt)(); /* 左用 */
void (*range_lt_b)();
void (*range_rt)(); /* 右用 */
void (*range_rt_b)();
} POINTER;/* ポインタ */
typedef struct {
EDGE *edge; /* 表示上のカーソルバッファ */
char *et_buf; /* 登録, 立体視等で使用 */
char *edge_buf; /* 同様 */
char *key[80]; /* 未使用 VRAM 上の各移動データ位置先頭 */
char *csr[80]; /* 同じく各カーソルデータ位置先頭 */
char *key_icn[80]; /* 同じく各移動アイコン位置先頭 */
char *csr_icn[80]; /* 同じく各カーソルアイコン位置先頭 */
DIR *dir; /* ディレクトリリスト先頭 */
DIR *pna; /* PNA ファイルリスト先頭 */
} BUFFER;
typedef struct {/* 表示位置 */
int p, q;
} PQ;
typedef struct {/* 残量表示関係 */
char *rnd;
PQ *pq, *mpq;
} DOT;
typedef struct {/* 図形表示範囲指定 */
int x, y; /* 縦横表示幅 */
int xo, yo; /* 表示の中心位置指定 */
} VIEW;
typedef struct {/* 使用カーソルリスト */
char csr[MAX_ICN];
} IDX;
typedef struct {/* DTA テーブル */
int seg;
int *addr;
} DTA;
#define not_bit(f,i) (f^=(i))
#define res_bit(f,i) (f&=~(i))
#define set_bit(f,i) (f|=(i))
#define test_bit(f,i) (f&(i))
#define vram_addr(x,y,p) (VRAM *)((x)/2+(y)*0x140+((p)?0:VRAM_SIZE))
#define access_page() G_nb.page=!G_nb.page
#define display_page(page) OUTPB(0x000cff82,(page)?0x67:0x77)
#define poke_dir(Dir,Far) _far_copy_buf(0x14,Dir,0x120,Far,sizeof(DIR))
#define peek_dir(Dir,Far) _far_copy_buf(0x120,Far,0x14,Dir,sizeof(DIR))
#define push_key(n_menu) mark_key(1,n_menu,color)
#define pull_key(n_menu) mark_key(2,n_menu,color)
#define isin(deg) P_i[i_ANGLE][(int)deg]
#define icos(deg) P_i[i_ANGLE][90-(int)deg]
#ifdef _AS
#define line __line
#define x_rot __x_rot
#define y_rot __y_rot
#define z_rot __z_rot
#define cul_r __cul_r
#define clip_z1 __clip_z1
#define clip_z2 __clip_z2
#else
#define line _line
#define x_rot _x_rot
#define y_rot _y_rot
#define z_rot _z_rot
#define cul_r _cul_r
#define clip_z1 _clip_z1
#define clip_z2 _clip_z2
#endif
#ifndef STATIC_C /* static.c 以外で以下を宣言 */
extern char *P_c[];
extern int *P_i[];
extern VRAM *P_v[];
extern DOT *P_dot[];
extern MENU G_mn[];
extern IDX G_id[];
extern MOVE G_mv[];
extern NUMBER G_nb;
extern PARAMETER G_pm;
extern POSITION G_ps;
extern POINTER G_pn;
extern BUFFER G_bf;
extern VIEW G_vi;
extern jmp_buf G_jb;
extern unsigned G_f, G_f2;
extern ET *G_et;
extern EDGE *G_edge;
extern FILE *G_file;
#endif
#include "etp.h"
#endif /* ET_H */
#define ET_H